// 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。

// 执行用时：
// 28 ms
// , 在所有 C++ 提交中击败了
// 60.08%
// 的用户
// 内存消耗：
// 14.6 MB
// , 在所有 C++ 提交中击败了
// 75.50%
// 的用户

#include<vector>
#include<string>
#include<set>
#include<bits/stdc++.h>
using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        if(head == NULL){
            return head;
        }
        while(head->val == val){
            head = head->next;
            if(head == NULL){
                ListNode* l;
                return l;
            }
        }
        ListNode* cur = head;
        while (head->next != NULL)
        {
            if(head->next->val == val){
                head->next = head->next->next;
            }
            else{
                head = head->next;
            }
        }
        return cur;
    }

};